草庐IT

c++ - C++ 中复杂的 Typedef

全部标签

c++ - 区分 typedef

我正在为C库编写C++抽象。C库有几个用于标识远程资源的ID的类型定义:typedefintcolor_id;typedefintsmell_id;typedefintflavor_id;//...color_idcreateColor(connection*);voiddestroyColor(connection*,color_id);//...所有这些typedef在编译器眼中当然是同一类型。这对我来说是个问题,因为我想重载函数并专门化模板以提供一个很好的C++友好API://can'tdothefollowingsince`color_id`,`smell_id`and`int

c++ - 通过 typedef : success at g++ , 强制模板实例化在 Visual C++ 中失败

我想强制模板实例化。以下代码在g++(http://coliru.stacked-crooked.com/a/33986d0e0d320ad4)下有效(print1)。但是,它在VisualC++(https://rextester.com/WGQG68063)中打印出错误的结果(0)。#include#includetemplatestructNonTypeParameter{};//internalimplementationintlala=0;templatestructHolder{staticintinit;};templateintHolder::init=lala++;/

c++ - 在哪里可以找到不同 STL 容器复杂性(性能)的比较?

这个问题在这里已经有了答案:Whatarethecomplexityguaranteesofthestandardcontainers?(3个答案)关闭9年前。我在谷歌上搜索了很长时间,以便找到一个比较,该比较显示了所有STL容器在插入/推送删除/弹出等方面的复杂性差异。我没有找到任何东西。也不在我所有的STL书籍中。有什么提示吗?我当然知道一些经验法则。但是定义在哪里呢?

C++ 打包 typedef 枚举

typedefenumBeNeLux{BELGIUM,NETHERLANDS,LUXEMBURG}_ASSOCIATIONS_BeNeLux;当我尝试使用C++编译器编译它时,出现错误,但它似乎可以在C编译器上正常工作。所以问题来了。是否可以在C++中打包枚举,或者有人能看出我为什么会收到错误消息吗?错误是:"semicolonmissingafterdeclarationofBeNeLux".我知道,在检查和重新检查之后,那里肯定有一个分号,并且在代码其余部分需要的任何地方。附录:_PACKAGE_只是一个例子。我正在重命名它。_ASSOCIATIONS_不是BeNeLux的一种:#

c++ - 复杂情况下如何进行宏替换?

考虑以下示例代码。#defineT(q)L##q#defineA(p)T("x"T(#p))wchar_tw[]=A(a);这段代码格式是否正确?w的值是多少?C和C++中的行为是否不同?在C++0x中有什么不同吗?我浏览了C++03标准,在我看来,代码应该对具有L"xa"值的w有效。找到A的调用,对其进行处理会产生pp序列T("x"T("a"))。找到T的调用,产生L##"x"T("a"),这又产生L"x"T("a").找到T的调用,产生L"x"L"a"。这样对吗?EDG和Clang都不接受该片段,MSVC9编译它就好了。 最佳答案

c++ - 相当于 int 的 typedef

如果我有一个模板容器,我可以使用typedef让我在编译时查找类型:templatestructMyList{typedefTType;Tget_front()const;//...};MyListchar_list;MyList::Typefront=char_list.get_front();在这种情况下,您可以改为声明charfront=char_list.get_front();,但有时这会很有用(例如包含其他模板类的模板类)。在我的例子中,模板没有指定类型名,而是指定了一个int(实际上是一个std::size_t):templatestructMyClass{//...};

c++ - 复杂的菱形继承(钻石问题) : C++ virtual inheritance

我有一个看起来像这样的菱形继承(钻石问题):__A/|\|B|\v|/vv\|v\vB2B3C\v/v/B4/\/D我尝试了很多方法来制作最好的虚拟继承来避免重复,但我找不到解决方案。类A包含一个位置。这是一个示例输出:Call:A()positionpointeris:0x2203be8Call:B()Call:B2()positionpointeris:0x2203be8Call:B3()positionpointeris:0x2203be8Call:C()positionpointeris:0x2203a28Call:B4()positionpointeris:0x2203be8

c++ - 在 C++ 中,std::string::push_back() 的摊销复杂度是 O(1) 吗?

我知道标准规定它适用于vector,但字符串呢? 最佳答案 是的,它是摊销常数时间。参见第716页的表101ofthisdocument:Table101listsoperationsthatareprovidedforsometypesofsequencecontainersbutnotothers.Animplementationshallprovidetheseoperationsforallcontainertypesshowninthe“container”column,andshallimplementthemsoast

c++ - 如何在 OpenCV 中对复杂矩阵进行逆运算?

我在求复数矩阵的逆时遇到了麻烦。据我所知,复数矩阵只是一个双channel矩阵(CV_32FC2/CV_64FC2)。假设我有一个矩阵C:MatC(2,2,CV_64FC2);C.at(0,0)[0]=1;C.at(0,0)[1]=1;C.at(0,1)[0]=3;C.at(0,1)[1]=4;C.at(1,0)[0]=2;C.at(1,0)[1]=-1;C.at(1,1)[0]=5;C.at(1,1)[1]=2;MatInverseMat;invert(C,InverseMat,DECOMP_SVD);执行反转函数后,我不断收到此错误:OpenCVError:Assertionfai

c++ - 将 void 转换为 typedef(最佳实践)

将void数组转换为typedef的最佳做法是什么?这就是我目前的做法:typedefstruct{int16_tleft,right;}SampleStereo16;void*buffer[100000];//databufferSampleStereo16*sample;//insertsomethingherethatwritestothebuffersample=(SampleStereo16*)buffer;这似乎工作正常,但不知何故我觉得有更好的方法。我还想知道是否有办法让样本数组和缓冲区共享相同的内存(现在它们各自使用自己的内存)。这是我目前正在处理的完整代码:#incl